{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Ch `10`: Concept `03`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Recurrent Neural Network on real data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.contrib import rnn\n",
    "import data_loader\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "class SeriesPredictor:\n",
    "\n",
    "    def __init__(self, input_dim, seq_size, hidden_dim):\n",
    "        # Hyperparameters\n",
    "        self.input_dim = input_dim\n",
    "        self.seq_size = seq_size\n",
    "        self.hidden_dim = hidden_dim\n",
    "\n",
    "        # Weight variables and input placeholders\n",
    "        self.W_out = tf.Variable(tf.random_normal([hidden_dim, 1]), name='W_out')\n",
    "        self.b_out = tf.Variable(tf.random_normal([1]), name='b_out')\n",
    "        self.x = tf.placeholder(tf.float32, [None, seq_size, input_dim])\n",
    "        self.y = tf.placeholder(tf.float32, [None, seq_size])\n",
    "\n",
    "        # Cost optimizer\n",
    "        self.cost = tf.reduce_mean(tf.square(self.model() - self.y))\n",
    "        self.train_op = tf.train.AdamOptimizer(learning_rate=0.01).minimize(self.cost)\n",
    "\n",
    "        # Auxiliary ops\n",
    "        self.saver = tf.train.Saver()\n",
    "\n",
    "    def model(self):\n",
    "        \"\"\"\n",
    "        :param x: inputs of size [T, batch_size, input_size]\n",
    "        :param W: matrix of fully-connected output layer weights\n",
    "        :param b: vector of fully-connected output layer biases\n",
    "        \"\"\"\n",
    "        cell = rnn.BasicLSTMCell(self.hidden_dim)\n",
    "        outputs, states = tf.nn.dynamic_rnn(cell, self.x, dtype=tf.float32)\n",
    "        num_examples = tf.shape(self.x)[0]\n",
    "        W_repeated = tf.tile(tf.expand_dims(self.W_out, 0), [num_examples, 1, 1])\n",
    "        out = tf.matmul(outputs, W_repeated) + self.b_out\n",
    "        out = tf.squeeze(out)\n",
    "        return out\n",
    "\n",
    "    def train(self, train_x, train_y, test_x, test_y):\n",
    "        with tf.Session() as sess:\n",
    "            tf.get_variable_scope().reuse_variables()\n",
    "            sess.run(tf.global_variables_initializer())\n",
    "            max_patience = 3\n",
    "            patience = max_patience\n",
    "            min_test_err = float('inf')\n",
    "            step = 0\n",
    "            while patience > 0:\n",
    "                _, train_err = sess.run([self.train_op, self.cost], feed_dict={self.x: train_x, self.y: train_y})\n",
    "                if step % 100 == 0:\n",
    "                    test_err = sess.run(self.cost, feed_dict={self.x: test_x, self.y: test_y})\n",
    "                    print('step: {}\\t\\ttrain err: {}\\t\\ttest err: {}'.format(step, train_err, test_err))\n",
    "                    if test_err < min_test_err:\n",
    "                        min_test_err = test_err\n",
    "                        patience = max_patience\n",
    "                    else:\n",
    "                        patience -= 1\n",
    "                step += 1\n",
    "            save_path = self.saver.save(sess, 'model.ckpt')\n",
    "            print('Model saved to {}'.format(save_path))\n",
    "\n",
    "    def test(self, sess, test_x):\n",
    "        tf.get_variable_scope().reuse_variables()\n",
    "        self.saver.restore(sess, './model.ckpt')\n",
    "        output = sess.run(self.model(), feed_dict={self.x: test_x})\n",
    "        return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "def plot_results(train_x, predictions, actual, filename):\n",
    "    plt.figure()\n",
    "    num_train = len(train_x)\n",
    "    plt.plot(list(range(num_train)), train_x, color='b', label='training data')\n",
    "    plt.plot(list(range(num_train, num_train + len(predictions))), predictions, color='r', label='predicted')\n",
    "    plt.plot(list(range(num_train, num_train + len(actual))), actual, color='g', label='test data')\n",
    "    plt.legend()\n",
    "    if filename is not None:\n",
    "        plt.savefig(filename)\n",
    "    else:\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step: 0\t\ttrain err: 1.1629480123519897\t\ttest err: 3.1306357383728027\n",
      "step: 100\t\ttrain err: 0.04217047616839409\t\ttest err: 0.2424612194299698\n",
      "step: 200\t\ttrain err: 0.040704380720853806\t\ttest err: 0.2777576446533203\n",
      "step: 300\t\ttrain err: 0.03915398567914963\t\ttest err: 0.268776535987854\n",
      "step: 400\t\ttrain err: 0.03752052038908005\t\ttest err: 0.24271434545516968\n",
      "Model saved to model.ckpt\n",
      "predicted_vals (22,)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb6e42bcc18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAEACAYAAABRQBpkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXl4VdX1v98V5gCBJEASkhAQEBEnxAFBaoqoaItjRbAt\nTq3+HNpqqxWHKmidh9qvQ52oiGIdqLVCFRExoiICAoIMEqZMkEBIQgJhCGT//tj3JjfJne9JchPW\n+zx5uPcM++wc4HzOGvZaYoxBURRFObKJae4JKIqiKM2PioGiKIqiYqAoiqKoGCiKoiioGCiKoiio\nGCiKoig4JAYi0kFEvhWRFSKyWkTu93JMexF5W0SyReQbEenjxLUVRVGUyHFEDIwxB4CfGmOGAicB\n54vIafUOuw4oMcYMBJ4BHnfi2oqiKErkOOYmMsZUuj52ANoC9VezXQS87vo8CzjbqWsriqIokeGY\nGIhIjIisAAqBT40xS+sdkgrkARhjDgNlIpLg1PUVRVGU8HHSMqh2uYnSgNNF5NgAp4hT11YURVEi\no63TAxpjykXkc2AssNZjVz6QDmwTkTZAnDGmpP75IqLFkhRFUULEGBPRC7ZT2UQ9RKSb63Mn4Bxg\nfb3DZgNXuT5fDizwNZ4xJqp/7r///mafg85T56nz1Hm6f5zAKcsgBXhdRGKwAvOOMeYjEZkKLDXG\nzAGmAW+ISDawC5jg0LUVRVGUCHFEDIwxq4GTvWy/3+PzAWC8E9dTFEVRnEVXIIdBZmZmc08hKHSe\nzqLzdBadZ3QhTvmbnEJETLTNSVEUJZoREUyEAWTHs4kURWke+vbtS05OTnNPQ2lEMjIy2Lp1a6OM\nrZaBorQSXG+HzT0NpRHx9XfshGWgMQNFURRFxUBRFEVRMVAURVFQMVAUpYVw44038tBDDzl+bKT0\n69ePBQt8FlRoMWgAWVFaCdEcQO7Xrx/Tpk1j9OjRzT0Vxwnld4uJiWHjxo0cddRRYV1LA8iKorRq\nDh8+3NxTaBJEordYs4qBoiiNyqRJk8jNzWXcuHHExcXx5JNPkpOTQ0xMDP/85z/JyMjg7LNtr6vx\n48eTkpJCfHw8mZmZrF1bW/j4mmuu4b777gPgiy++ID09naeffpqkpCRSU1OZPn16WMeWlJQwbtw4\nunXrxumnn85f/vIXRo0a5fP3eeONN+jbty89e/bk4YcfrrNv6dKljBgxgvj4eFJTU/nd737HoUOH\nADjrrLMwxnDCCScQFxfHe++9R1lZGePGjaNXr14kJiYybtw4tm3bFtH9DhcVA0VRGpUZM2bQp08f\n5syZQ3l5ObfffnvNvoULF7J+/Xo++eQTAC644AI2bdrEjh07OPnkk/nlL3/pc9zCwkIqKirYtm0b\nr776KjfffDO7d+8O+dibbrqJrl27smPHDqZPn87rr7/u8w1+7dq13HTTTcycOZNt27axa9cuCgoK\nava3adOGZ555hpKSEr755hsWLFjACy+8AFhRAli9ejXl5eVcfvnlVFdXc+2115KXl0dubi6xsbHc\ncsstIdxdB2nu0qteSrEaRVFCJ9D/HXDmJxz69u1rPvvss5rvW7duNTExMWbr1q0+zyktLTUiYsrL\ny40xxlx99dXmL3/5izHGmKysLBMbG2sOHz5cc3yvXr3Mt99+G9Kxhw8fNu3atTPZ2dk1++69914z\natQor3N64IEHzMSJE2u+792717Rv377O7+bJM888Yy699NKa7yJiNm3a5PN3XrFihUlISPC539ff\nsWt7RM9eLUehKEcI0RhbTktLq/lcXV3N3XffzaxZsyguLkZEEBGKi4vp2rVrg3MTExOJial1bsTG\nxrJnzx6v1/F17M6dOzl8+HCdeaSnp/uc77Zt2+rsj42NJTExseZ7dnY2f/zjH1m2bBn79u3j0KFD\nDBs2zOd4+/bt49Zbb+WTTz6hrKwMYwx79uzBGNPk8QV1EymK0uj4erB5bn/rrbeYPXs2CxYsoKys\njK1btzravMUbPXv2pG3btuTn59dsy8vL83l8SkpKnf2VlZXs2rWr5vuNN97I4MGD2bRpE2VlZTz0\n0EN+5//UU0+RnZ3N0qVLKSsrY+HChQDNkhWmYqAoSqOTnJzM5s2b62yr/8CrqKigQ4cOxMfHs3fv\nXu66665GfzuOiYnh0ksvZcqUKezbt4/169czY8YMn8f/4he/YM6cOSxatIiqqiruu+++Or9HRUUF\ncXFxxMbGsn79ev7xj3/UOb/+faioqKBTp07ExcVRUlLClClTHP8dgyViMRCRNBFZICJrRGS1iPze\nyzFniUiZiCx3/dwb6XUVRWk5TJ48mQcffJCEhASefvppoKG1MGnSJPr06UNqairHHXccI0aMCOka\noQiH57HPPvssZWVlpKSkcNVVV3HllVfSoUMHr+cde+yxPP/880ycOJHevXuTmJhYx8X05JNPMnPm\nTOLi4rjhhhuYMKFuQ8cpU6YwadIkEhISmDVrFrfddhuVlZX06NGDESNGcMEFF4T0OztJxIvORCQZ\nSDbGrBSRLsB3wEXGmPUex5wF/MkYc2EQ45nmMJEUpaUTzYvOWhKTJ0+mqKiI1157rbmn0oCoXnRm\njCk0xqx0fd4DrANSvRwavastFEU5Yvnxxx9ZvXo1AEuWLGHatGlceumlzTyrpsfRbCIR6QucBHzr\nZfdwEVkBbAPuMMas9XKMoihKk1JRUcHEiRPZvn07SUlJ3HHHHYwbN665p9XkOCYGLhfRLOAPLgvB\nk++ADGNMpYicD3wAHO1rLM8gSmZm5hHTg1RRlKbnlFNOITs7u7mnERJZWVlkZWU5OqYjhepEpC0w\nB/jYGPP3II7fAgwzxpR42acxA0UJA40ZtH6iOmbg4p/AWl9CICJJHp9Pw4pQAyFQFEVRmoeI3UQi\nMhL4JbDaFRMwwN1ABnaJ9MvAL0TkRqAK2AdcEel1FUVRFOfQfgaK0kpQN1HrpyW4iRRFUZQWjIqB\noigtHs/+BV999RWDBw9ukuvGxMQ0KLPRUlExUBSlVXHmmWeybt26gMe9/vrrfpvYBEM0dy4LFRUD\nRVGiiqZqgelEmejWFKNRMVAUpUno168fjz76KEOGDCExMZHrrruOgwcP1rSlfPzxx0lJSeHaa68F\nYM6cOQwdOpT4+HjOPPPMmpIRACtWrGDYsGF069aNCRMmsH///pp97vHc5Ofnc9lll9GrVy969uzJ\n73//e9avX8+NN97IN998Q9euXUlISADg4MGD3H777WRkZJCSksJNN93EgQMHasZ64okn6N27N2lp\nabz22mtqGSiKooTDW2+9xaeffsqmTZv48ccf+etf/wrYtpRlZWXk5uby8ssvs2LFCq677jpeeeUV\nSkpKuOGGG7jwwgupqqqiqqqKSy65hKuuuoqSkhIuv/xy/v3vf9e5jvshXV1dzc9//nP69etHbm4u\nBQUFTJgwgWOOOYYXX3yRM844g4qKCkpK7LKnO++8k40bN7Jq1So2btxIQUEBDzzwAABz587l6aef\n5rPPPiM7O5v58+c34Z1rAiJtleb0D9r2UlHCIuD/nebse2ls68uXX3655vtHH31kBgwYYLKyskyH\nDh3MwYMHa/bdeOON5r777qtz/qBBg8zChQvNwoULTWpqap19I0aMqNPmMj093RhjzKJFi0yvXr3q\ntLx0M3369AbtLTt37mw2b95c833RokWmX79+xhhjrr32WnPXXXfV7NuwYYOJiYnx28bSaXz9HaNt\nLxVFCZoo8G971v7PyMhg27ZtgO041q5du5p9OTk5zJgxg2effRawL61VVVU1x6em1i2MnJGR4fV6\n+fn5ZGRk1Gl56YudO3dSWVlZp01ldXV1TVxg27ZtnHLKKXWuaaLgnjqFuokURWkyPFtG5uTk0Lt3\nb6BhVk56ejr33HMPJSUllJSUUFpayp49e7jiiitISUmhoKCgzvG5ubler5eenk5ubi7V1dUN9tW/\nZo8ePYiNjWXNmjU11y0rK2P37t1Aw5aXOTk5GjNQFEUJh+eff56CggJKSkp4+OGHazqB1X/D/u1v\nf8uLL77IkiVLANi7dy8fffQRe/fu5YwzzqBt27Y8++yzHDp0iPfff7/muPqcdtpppKSkMHnyZCor\nKzlw4ACLFi0CICkpifz8fKqqqgArDr/97W+59dZb2blzJwAFBQXMmzcPgPHjxzN9+nTWrVtHZWVl\nTSyhtaBioChKk3HllVdy7rnnMmDAAAYOHMg999wDNHxLHzZsGK+88gq33HILCQkJHH300bz++usA\ntGvXjvfff5/XXnuNxMRE3nvvPS677DKv14uJiWH27NlkZ2fTp08f0tPTeffddwEYPXo0Q4YMITk5\nmV69egHw6KOPMmDAAIYPH0737t0599xz2bBhAwBjx47l1ltvZfTo0Rx99NGcffbZjXKPmgutTaQo\nrYRor03Ur18/pk2bxujRo5t7Ki0WrU2kKIqiNCoqBoqiNAmtKdjaGlE3kaK0EqLdTaREjrqJFEVR\nlEYlYjEQkTQRWSAia0RktYj83sdx/yci2SKyUkROivS6iqIoinM4sQL5EPBHY8xKEekCfCci84wx\n690HiMj5QH9jzEAROR14ERjuwLUVRVEUB4jYMjDGFBpjVro+7wHWAan1DrsImOE65lugm4gkRXpt\nRVEUxRkcjRmISF/gJODbertSgTyP7wU0FAxFURSlmXCsUJ3LRTQL+IPLQgibKVOm1HzOzMwkMzMz\norkpinLkMnXqVDZu3Mgbb7zR3FNxjKysLLKyshwd05HUUhFpC8wBPjbG/N3L/heBz40x77i+rwfO\nMsYUeTlWU0sVJQyiObXUqdXHr7/+Oq+++ipffvll0OdMnTqVTZs2MWPGjIDHXnPNNaSnp0dt3aGW\n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\nvbkAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb6e4136470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "if __name__ == '__main__':\n",
    "    seq_size = 5\n",
    "    predictor = SeriesPredictor(input_dim=1, seq_size=seq_size, hidden_dim=100)\n",
    "    data = data_loader.load_series('international-airline-passengers.csv')\n",
    "    train_data, actual_vals = data_loader.split_data(data)\n",
    "\n",
    "    train_x, train_y = [], []\n",
    "    for i in range(len(train_data) - seq_size - 1):\n",
    "        train_x.append(np.expand_dims(train_data[i:i+seq_size], axis=1).tolist())\n",
    "        train_y.append(train_data[i+1:i+seq_size+1])\n",
    "\n",
    "    test_x, test_y = [], []\n",
    "    for i in range(len(actual_vals) - seq_size - 1):\n",
    "        test_x.append(np.expand_dims(actual_vals[i:i+seq_size], axis=1).tolist())\n",
    "        test_y.append(actual_vals[i+1:i+seq_size+1])\n",
    "\n",
    "    predictor.train(train_x, train_y, test_x, test_y)\n",
    "\n",
    "    with tf.Session() as sess:\n",
    "        predicted_vals = predictor.test(sess, test_x)[:,0]\n",
    "        print('predicted_vals', np.shape(predicted_vals))\n",
    "        plot_results(train_data, predicted_vals, actual_vals, 'predictions.png')\n",
    "\n",
    "        prev_seq = train_x[-1]\n",
    "        predicted_vals = []\n",
    "        for i in range(20):\n",
    "            next_seq = predictor.test(sess, [prev_seq])\n",
    "            predicted_vals.append(next_seq[-1])\n",
    "            prev_seq = np.vstack((prev_seq[1:], next_seq[-1]))\n",
    "        plot_results(train_data, predicted_vals, actual_vals, 'hallucinations.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
